package jp.co.neosystem.adwg.neodiary.activity;

import static jp.co.neosystem.adwg.neodiary.util.Constants.INTENT_KEY_EDITTEXT_CONTENT;
import static jp.co.neosystem.adwg.neodiary.util.Constants.INTENT_KEY_EDITTEXT_DATE;
import static jp.co.neosystem.adwg.neodiary.util.Constants.INTENT_KEY_EDITTEXT_TITLE;

import java.util.Calendar;

import jp.co.neosystem.adwg.neodiary.R;

import org.apache.commons.lang.StringUtils;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;

/**
 * 編集画面用Activity
 * 
 * @author NEOSystem
 */
public class EditActivity extends Activity
{
	/** 確認ボタン */
	private Button buttonConfirm;
	/** 戻るボタン */
	private Button buttonBack;
	/** クリアボタン */
	private Button buttonClearDate;
	/** カレンダーボタン */
	private ImageButton imageButtonCalendar;
	/** 日付エディットボックス */
	private EditText editTextDate;
	/** タイトルエディットボックス */
	private EditText editTextTitle;
	/** 内容エディットボックス */
	private EditText editTextContent;
	/** 日付選択ダイアログ */
	private DatePickerDialog datePickerDialog;

	/**
	 * onCreateメソッド
	 * 
	 * @param savedInstanceState
	 */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.edit);

		// 各ウィジェットのインスタンス取得
		buttonConfirm = (Button) findViewById(R.id.buttonConfirm);
		buttonBack = (Button) findViewById(R.id.buttonBack);
		buttonClearDate = (Button) findViewById(R.id.buttonClearDate);
		imageButtonCalendar = (ImageButton) findViewById(R.id.imageButtonCalendar);
		editTextDate = (EditText) findViewById(R.id.editTextDate);
		editTextTitle = (EditText) findViewById(R.id.editTextTitle);
		editTextContent = (EditText) findViewById(R.id.editTextContent);

		// 各ボタンのリスナーセット
		buttonConfirm.setOnClickListener(new OnClickListener4ButtonConfirm());
		buttonBack.setOnClickListener(new OnClickListener4ButtonBack());
		buttonClearDate.setOnClickListener(new OnClickListener4ButtonClearDate());
		imageButtonCalendar.setOnClickListener(new OnClickListener4ImageButtonCalendar());
	}

	/**
	 * 確認ボタン用クリックリスナー
	 * 
	 * @author NEOSystem
	 */
	private class OnClickListener4ButtonConfirm implements OnClickListener
	{
		/**
		 * クリック時処理
		 * 
		 * @param view
		 */
		public void onClick(View view)
		{
			String date = editTextDate.getText().toString();
			String title = editTextTitle.getText().toString();
			String content = editTextContent.getText().toString();
			boolean check = true;

			if (StringUtils.isEmpty(date))
			{
				editTextDate.setError(getString(R.string.edittext_date_error_message));
				check = false;
			}
			if (StringUtils.isEmpty(title))
			{
				editTextTitle.setError(getString(R.string.edittext_title_error_message));
				check = false;
			}
			if (StringUtils.isEmpty(content))
			{
				editTextContent.setError(getString(R.string.edittext_content_error_message));
				check = false;
			}

			// 入力チェックがtrueの場合、確認画面へ遷移
			if (check)
			{
				Intent intent = new Intent(EditActivity.this, ConfirmActivity.class);
				intent.putExtra(INTENT_KEY_EDITTEXT_DATE.toString(), date);
				intent.putExtra(INTENT_KEY_EDITTEXT_TITLE.toString(), title);
				intent.putExtra(INTENT_KEY_EDITTEXT_CONTENT.toString(), content);

				startActivity(intent);
			}
		}
	}

	/**
	 * 戻るボタン用クリックリスナー
	 * 
	 * @author NEOSystem
	 */
	private class OnClickListener4ButtonBack implements OnClickListener
	{
		/**
		 * クリック時処理
		 * 
		 * @param view
		 */
		public void onClick(View view)
		{
			finish();
		}
	}

	/**
	 * クリアボタン用クリックリスナー
	 * 
	 * @author NEOSystem
	 */
	private class OnClickListener4ButtonClearDate implements OnClickListener
	{
		/**
		 * クリック時処理
		 * 
		 * @param view
		 */
		public void onClick(View view)
		{
			editTextDate.setText(null);
		}
	}

	/**
	 * カレンダーボタン用クリックリスナー
	 * 
	 * @author NEOSystem
	 */
	private class OnClickListener4ImageButtonCalendar implements OnClickListener
	{
		/**
		 * クリック時処理
		 * 
		 * @param view
		 */
		public void onClick(View view)
		{
			// 日付情報の初期設定
			Calendar calendar = Calendar.getInstance();
			int year = calendar.get(Calendar.YEAR);
			int monthOfYear = calendar.get(Calendar.MONTH);
			int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);

			datePickerDialog = new DatePickerDialog(view.getContext(), new OnDateSetListener4DatePickerDialog(), year, monthOfYear, dayOfMonth);
			datePickerDialog.show();
		}
	}

	/**
	 * 日付選択ダイアログ用データセットリスナー
	 * 
	 * @author NEOSystem
	 */
	private class OnDateSetListener4DatePickerDialog implements OnDateSetListener
	{
		/**
		 * データセット処理
		 * 
		 * @param view
		 * @param year
		 * @param monthOfYear
		 * @param dayOfMonth
		 */
		public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
		{
			// monthOfYearは実際の値より1減算された値が返ってくるので、1加算しておく
			editTextDate.setText(year + "/" + (monthOfYear + 1) + "/" + dayOfMonth);
		}
	}
}